package com.changgou.page.service.impl;

import com.alibaba.fastjson.JSON;
import com.changgou.goods.feign.CategoryFeign;
import com.changgou.goods.feign.GoodsFeign;
import com.changgou.goods.feign.SpuFeign;
import com.changgou.goods.pojo.Category;
import com.changgou.goods.pojo.Sku;
import com.changgou.goods.pojo.Spu;
import com.changgou.page.service.PageService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class PageServiceImpl implements PageService {
	@Autowired
	private GoodsFeign goodsFeign;
//	@Autowired
//	private SpuFeign spuFeign;
//	@Autowired
//	private CategoryFeign categoryFeign;
	@Autowired
	private TemplateEngine templateEngine;

	@Value("${pagepath}")
	private String pagepath;
	@Override
	public void generateHtml(String spuId) {
		//1.获取context对象,存储商品相关数据
		Context context = new Context();
		//获取静态化页面的相关数据
		Map<String,Object> itemData = this.getItemData(spuId);
		context.setVariables(itemData);
		//2.获取商品详情页面存储位置
		File dir = new File(pagepath);
		//3.判断当前存储位置是否存在
		if(!dir.exists()){
			dir.mkdir();
		}
		//4.定义输出流,完成存储
		File file = new File(dir+"/"+spuId+".html");
		Writer out = null;
		try{
			out = new PrintWriter(file);
			templateEngine.process("item",context,out);
		}catch (Exception e){
			e.printStackTrace();
		}finally {
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private Map<String, Object> getItemData(String spuId) {
		Map<String, Object> resultMap = new HashMap<>();
		//获取spu
		Spu spu = goodsFeign.findSpuById(spuId).getData();
		resultMap.put("spu",spu);
		//获取图片信息
		if(spu!=null){
			if(StringUtils.isNotEmpty(spu.getImages())){
				resultMap.put("imageList",spu.getImages().split(","));
			}
		}
		//获取商品的分类信息
		Category category1 = goodsFeign.findById(spu.getCategory1Id()).getData();
		resultMap.put("category1",category1);
		Category category2 = goodsFeign.findById(spu.getCategory2Id()).getData();
		resultMap.put("category2",category2);
		Category category3 = goodsFeign.findById(spu.getCategory3Id()).getData();
		resultMap.put("category3",category3);
		//获取sku的相关信息
		List<Sku> skuList  = goodsFeign.findSkuListBySpuId(spuId);
		resultMap.put("skuList ",skuList );
		resultMap.put("specificationList", JSON.parseObject(spu.getSpecItems(), Map.class));
		return resultMap;
	}
}
